home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / online / fidonetts / fsc-0048.002 < prev    next >
Text File  |  1990-11-06  |  20KB  |  397 lines

  1. Document: FSC-0048
  2. Version:  002
  3. Date:     21-Oct-90
  4.  
  5.  
  6.  
  7.  
  8.  
  9.                    A Proposed Type-2 Packet Extension
  10.                               Jan Vroonhof
  11.                            2:281/1.12@fidonet
  12.                               Oct 21, 1990
  13.  
  14.  
  15.  
  16.  
  17.  
  18.      Status of this document
  19.      =======================
  20.  
  21.      This  FSC  suggests  a proposed  protocol  for  the  FidoNet(r) 
  22.      community,   and   requests  discussion  and  suggestions   for 
  23.      improvements. Distribution of this document is unlimited.
  24.  
  25.      Fido and FidoNet are registered marks of Tom Jennings and  Fido 
  26.      Software.
  27.  
  28.      Purpose
  29.      =======
  30.  
  31.      The  final  goal of this document is to become  a  widely  used 
  32.      standardised  extension to FTS-0001,  like FTS-0006,  0007  and 
  33.      0008  are,  and  provide  an elegant way to  switch  to  a  new 
  34.      bundling  method  without requiring major  effort  or  breaking 
  35.      anything.
  36.  
  37.      Prologue
  38.      ========
  39.  
  40.      The  main  thing  that needs stressing is  that  the  additions 
  41.      covered  by this document are FULLY (I repeat FULLY)  BACKWARDS 
  42.      COMPATIBLE  with  FTS-0001 (and other  existing  standards  and 
  43.      practices  in  FidoNet and WhatEverOtherNets that I  know  of). 
  44.      When I say "backwards compatible" I mean that problems it would 
  45.      create  already  exist  in the current  FTS-0001  system  (e.g. 
  46.      zone  conflicts when dealing with a non compliant  system).  In 
  47.      short   it  only  corrects  some  flaws  in  FTS-0001   WITHOUT 
  48.      generating new ones.
  49.  
  50.      In  this document I have tried to stay as much as  possible  on 
  51.      the   paths   of  existing   practices.   Therefore   I   think 
  52.      implementation  of  the additions it proposes will not  be  too 
  53.      hard.
  54.  
  55. !    Prologue to revision 2
  56. !    ======================
  57.  
  58. !    Revision   2   of  this  document  reserves  a   bit   in   the 
  59. !    CapabilityWord  for one bundle type already in use  outside  of 
  60. !    FidoNet,  RFC-822.  A small change was made to the  "receiving" 
  61. !    flowchart  in order to ensure compatibility with  FSC-0039.004. 
  62. !    In  the process a lot of errors and omissions in the  spelling, 
  63. !    credits etc. were corrected.
  64.  
  65.      ===============
  66.  
  67. !    All  references in the following to FSC-0039 are to Revision  1 
  68. !    of that document.
  69.  
  70.      My thoughts on FSC-0039 and FTS-0001 rev 12
  71.      ===========================================
  72.  
  73.      First,  revision  12  of FTS-0001 introduced  the  term  "(some 
  74.      impls)"  to indicate that some implementations used  their  own 
  75. !    extensions  to FTS-0001 (Note that in later revisions this  was 
  76. !    changed to "optional"). The problem is that this info cannot be 
  77.      relied upon,  because there is no way to actually validate  the 
  78.      data. One can only check whether the values of these fields are 
  79.      in the range of valid values and hope for the best.
  80.  
  81.      Second,  FSC-0039  introduced  the idea of  having  a  bitfield 
  82.      (called the Capability Word) indicating whether extension  data 
  83.      was  valid.  Through  the  Capability Word,  it  also  made  it 
  84.      possible to indicate the ability to support other,  non type 2, 
  85.      packets,  thus allowing for flexible migration towards type  3. 
  86.      It  also documented the addressing extensions used  by  various 
  87.      programs.
  88.  
  89.      However, FSC-0039 has two flaws:
  90.  
  91.      1. One  cannot  be  sure the bitfield  is  zero  because  other 
  92.         implementations might use this field for their own purposes. 
  93.         Therefore  this document includes a second  validation  copy 
  94.         for the Capability Word (CW hereafter). This copy allows the 
  95.         FSC-xxxx compliant software to validate the CW by  comparing 
  96.         the two.  The chance of some junk portraying itself as a  CW 
  97.         is significantly reduced by this.
  98.  
  99. !       Please  note  that  the  validation  copy  is  byte  swapped 
  100. !       compared to the normal capability word.  While this  started 
  101. !       out  as a typo,  I decided to leave it in as  it  introduces 
  102. !       some extra safety, without requiring much extra code effort. 
  103. !       In later revisions of FSC-0039,  Mark adopted this idea of a 
  104. !       validation copy too and eliminated the problem.
  105.  
  106.      2. Although  FSC-0039 provides a way to make packet headers  4D 
  107.         it  is not backwards compatible.  It cannot be used in  FTS-
  108.         0001 sessions to unknown systems,  making FidoNet still  not 
  109.         totally 4D capable.  Although it implements fields for  zone 
  110.         and point number,  an FTS-0001 compliant application is  not 
  111.         required to look at these fields.  When a point mails  using 
  112.         these  fields  to implement its 4D address,  a  system  only 
  113.         looking  at the net/node info,  as is required by  FTS-0001, 
  114.         still sees it as a boss node, causing the obvious problems.
  115.  
  116.         This document provides a way for transparent point handling, 
  117.         using   a  technique  already  exploited  by  many   mailers 
  118.         internally.  It  will allow this document to be  implemented 
  119.         and used by mailers not supporting it.  At the same time the 
  120.         danger that a point is seen as the boss node is eliminated.
  121.  
  122.         It does NOT provide full inter-zone backwards compatibility, 
  123.         but that is not needed as badly, as problems are not yet too 
  124.         great.  Any  measures to ensure backwards  compatibility  in 
  125.         this  area  might  harm  communication  with  non-supporting 
  126.         programs, when the old system could handle the situation.
  127.  
  128.      Packet Header
  129.      =============
  130.  
  131.      The "|" character is used to indicate extensions documented  in 
  132.      FTS-0001  revision  12,   the  ":"  character  indicates  those 
  133.      documented here and in FSC-0039.
  134.  
  135.        Offset
  136.       dec hex
  137.               .-----------------------------------------------------.
  138.         0   0 | origNode     (low order) | origNode    (high order) |
  139.               +--------------------------+--------------------------+
  140.         2   2 | destNode     (low order) | destNode    (high order) |
  141.               +--------------------------+--------------------------+
  142.         4   4 | year         (low order) | year        (high order) |
  143.               +--------------------------+--------------------------+
  144.         6   6 | month        (low order) | month       (high order) |
  145.               +--------------------------+--------------------------+
  146.         8   8 | day          (low order) | day         (high order) |
  147.               +--------------------------+--------------------------+
  148.        10   A | hour         (low order) | hour        (high order) |
  149.               +--------------------------+--------------------------+
  150.        12   C | minute       (low order) | minute      (high order) |
  151.               +--------------------------+--------------------------+
  152.        14   E | second       (low order) | second      (high order) |
  153.               +--------------------------+--------------------------+
  154.        16  10 | baud         (low order) | baud        (high order) |
  155.               +--------------------------+--------------------------+
  156.        18  12 |      0      |      2     |      0      |      0     |
  157.               +--------------------------+--------------------------+
  158.        20  14 | origNet      (low order) | origNet     (high order) |
  159. :             |               Set to -1 if from point               |
  160.               +--------------------------+--------------------------+
  161.        22  16 | destNet      (low order) | destNet     (high order) |
  162.               +--------------------------+--------------------------+
  163. |      24  18 | ProductCode  (low order) | Revision         (major) |
  164. |             +--------------------------+--------------------------+
  165. |      26  1A |                      password                       |
  166. |             |               8 bytes, null padded                  |
  167. |             +--------------------------+--------------------------+
  168. |:     34  22 | origZone     (low order) | origZone    (high order) | }
  169. |             +--------------------------+--------------------------+ } As in
  170. |:     36  24 | destZone     (low order) | destZone    (high order) | } QMail
  171. :             +--------------------------+--------------------------+
  172. :      38  26 | AuxNet       (low order) | AuxNet      (high order) |
  173. :             +--------------------------+--------------------------+
  174. :      40  28 | CWvalidationCopy  (high) | CWvalidationCopy   (low) |
  175. :             +--------------------------+--------------------------+
  176. :      42  2A | ProductCode (high order) | Revision         (minor) |
  177. :             +--------------------------+--------------------------+
  178. :      44  2C | CapabilWord  (low order) | CapabilWord (high order) |
  179. :             +--------------------------+--------------------------+
  180. :      46  2E | origZone     (low order) | origZone    (high order) | }
  181. :             +--------------------------+--------------------------+ } As in
  182. :      48  30 | destZone     (low order) | destZone    (high order) | } FD etc
  183. :             +--------------------------+--------------------------+
  184. :      50  32 | origPoint    (low order) | origPoint   (high order) | }
  185. :             +--------------------------+--------------------------+ } As in
  186. :      52  34 | destPoint    (low order) | destPoint   (high order) | } FD etc
  187. :             +--------------------------+--------------------------+
  188. :      54  46 |                 Product Specific Data               |
  189. :             +                                                     +
  190. :             |                       4 Bytes                       |
  191.               +--------------------------+--------------------------+
  192.        58  3A |                     zero or more                    |
  193.               ~                        packed                       ~
  194.               |                       messages                      |
  195.               +--------------------------+--------------------------+
  196.               |      0      |      0     |      0      |      0     |
  197.               '-----------------------------------------------------'
  198.  
  199.     Packet       = PacketHeader  { PakdMessage }  00H 00H
  200.  
  201.     PacketHeader = origNode       (* of packet, not of messages in packet   *)
  202.                    destNode       (* of packet, not of messages in packet   *)
  203.                    year           (* of packet creation, e.g. 1986          *)
  204.                    month          (* of packet creation, 0-11 for Jan-Dec   *)
  205.                    day            (* of packet creation, 1-31               *)
  206.                    hour           (* of packet creation, 0-23               *)
  207.                    minute         (* of packet creation, 0-59               *)
  208.                    second         (* of packet creation, 0-59               *)
  209.                    baud           (* max baud rate of orig and dest         *)
  210.                    PacketType     (* old type-1 packets now obsolete        *)
  211.                    origNet        (* of packet, not of messages in packet
  212.                                      set to -1 if orig=point                *)
  213.                    destNet        (* of packet, not of messages in packet   *)
  214. +                  productCode Lo (* 0 for Fido, write to FTSC for others   *)
  215. |+                 serialNo Maj   (* binary serial number (otherwise null)  *)
  216. |                  password       (* session pasword  (otherwise null)      *)
  217. |                  origZone       (* zone of pkt sender (otherwise null)    *)
  218. |                  destZone       (* zone of pkt receiver (otherwise null)  *)
  219. |                  auxNet         (* contains Orignet if Origin is a point  *)
  220. +!        Bytesw.  CWvalidationCopy (* Must be equal to CW to be valid      *)
  221. +                  ProductCode Hi
  222. +                  revision Minor
  223. +                  origZone       (* zone of pkt sender (otherwise null)    *)
  224. +                  destZone       (* zone of pkt receiver (otherwise null)  *)
  225. +                  ProdData       (* Product specific filler                *)
  226.  
  227.      When  the two copies of the CW match they can be asumed  to  be 
  228.      valid and used.
  229.  
  230.      Stone-Aged: Old FTS-0001
  231.      Type-2+   : Old FTS-0001 plus changes indicated by "|" and  ":" 
  232.                  are valid
  233.  
  234.      A  Type-N Bundle will always advertise its capabilities in  the 
  235.      CW regardless of the type being sent.   As shown in the example 
  236.      below,  the CW allows Type-N processors to automatically  track 
  237.      the capability of your system.   Again, in cases where a stone-
  238.      age processor is being used, this field will be ignored, and in 
  239.      the  unusual  event  that it is not  ignored,  and  is  somehow 
  240.      harmful  to  the  far  system,  the  Type-N  processor  can  be 
  241.      configured to send a CW of 0.
  242.  
  243.      The format of the Capability Word is designed to support up  to 
  244.      15  future bundle types,  and is bit-mapped to  facilitate  the 
  245.      easy  determination  of  the  maximum  common  level  supported 
  246.      between two nodes:
  247.  
  248.                     msb           Capability Word               lsb
  249.      Node Supports  ------------FTSC Type Supported **)------------
  250.  
  251.                      U 16 15 14 13 12 11 10  9  8  7  6  5  4  3 2+
  252.  
  253.      2+,3, and 7     0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  1
  254.      2+,3, and 5     0  0  0  0  0  0  0  0  0  0  0  0  1  0  1  1
  255.      2+ (this Doc)   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1
  256.      Stone Age       0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  257.  
  258. !                    ^-- "U" Indicates nodes able to process RFC-822 
  259. !                        bundles.
  260.                     ** - In the example bit definitions only type 2, 
  261.                          and  the Stone-Age type,  are defined  now. 
  262.                          The rest are to be concidered "reserved  by 
  263.                          FTSC".
  264.  
  265.      The receiving Type-N bundler would AND the two words, obtaining 
  266.      a  word  expressing  the Types which are  common  to  both  the 
  267.      receiving  and the sending system.   The most significant  Type 
  268.      will be used for future sessions,  by default. Please note that 
  269.      this assumes that new bundling Types will be increasingly  more 
  270.      efficient or in some way more beneficial.  Because this may not 
  271.      always  be  the  case,  there should be a  method  provided  to 
  272.      override the automatic upgrade,  as illustrated  above,  should 
  273.      this ever happen.
  274.  
  275. !    N.B. The  one bit left over (Msb) is now used as indicator  for 
  276. !         RFC-822 type bundles. For info on RFC-822 please check out 
  277. !         the relevant documents themselves.
  278.  
  279. !         For  a more explanatory text on using the CW to  its  full 
  280. !         potential,  refer  to  the FSC-0039 text by  Mark  Howard. 
  281. !         Mark also gives some more rationale for the origional idea 
  282. !         of the CW.
  283.  
  284.      Generating Type-2+ bundles
  285.      ==========================
  286.  
  287.       Do we have a CW              Does CW indicate
  288.      stored for dest?  YES ---->   higher packets  YES ---> Generate higher
  289.            NO                       we support?                packet
  290.            |                            NO
  291.           \|/                           |
  292.            +-----<----------------------+
  293.            |
  294.       Fill header with all info
  295.            |
  296.           \|/
  297.            |
  298.       Are we sending from a point? (origPoint != 0) YES --+
  299.            |                                              |
  300.           NO                                              |
  301.            |                                             \|/
  302.            |                                    set AuxNet = OrigNet
  303.           \|/                                  set OrigNet = -1
  304.            |                                              |
  305.            +-----<----------------------------------------+
  306.            |
  307.       Add Messages
  308.            |
  309.       Terminate packet
  310.            |
  311.        Send packet
  312.  
  313.      Receiving Type-2+ bundles
  314.      =========================
  315.  
  316.        Receive Packet
  317.            |
  318.        Packettype = 2  NO  -------------> Process Type-Other
  319.           YES
  320.            |
  321.            |
  322.        CWcopies match  NO --------+------> Treat as normal Stone-Age packet
  323.           YES                     |     |
  324.            |                      |     |
  325.        Store CW                  /|\    |
  326.            |                      |    /|\
  327.        CW is 0 YES  --------------+     |
  328.           NO                            |
  329.            |                            |
  330.            |                            |
  331.        CW indicates support for 2+ NO --+
  332.           YES
  333.            |
  334.            |
  335. !      OrigPoint is not 0 and OrigNet = -1 YES -------+
  336.            NO                                         |
  337.            |                                         \|/
  338. !         \|/                            Set OrigNet is AuxNet
  339.            |                                          |
  340.            +------<-----------------------------------+
  341.            |
  342.         Process using added info
  343.  
  344.      Credits
  345.      =======
  346.  
  347.      To Mark Howard,  for introducing the idea of a CW in his  FSC-
  348.      0039  document and quite rightly pointing out one big  omision 
  349.      in revision 1 of this document.
  350.  
  351.      To  Rick Moore,  for doing a good job in processing all  these 
  352.      revisions by Mark and myself, and for his work for the FTSC in 
  353.      general.
  354.  
  355.      To  Joaquim  Homrighausen,  for his contributions  to  FidoNet 
  356.      software  in general,  and especially for his time devoted  to 
  357.      reading,  discussing  and  implementing the ideas Mark  and  I 
  358.      introduced.
  359.  
  360.      To  Andre van de Wijdeven,  for producing and letting me  beta 
  361.      test his TS-MM software, which in my opinion is the best point 
  362.      software around.  (I'm not saying available,  because it isn't 
  363.      :-()
  364.  
  365.      To john lots, for shipping this stuff to the US.
  366.  
  367.      To  Jon  Webb,  for doing a much needed grammar  and  spelling 
  368.      check.
  369.  
  370.      To Bob Hartman, Vince Periello, Tom Jennings, Eelco de Graaff, 
  371.      aXel Horst,  Arjen van Loon,  jim nutt,  Odinn Sorensen, David 
  372.      Nugent,  Peter  Janssens and many others,  for making  FidoNet 
  373.      what it is now, for me and for everybody.
  374.  
  375.      Epilog
  376.      ======
  377.  
  378.      So  this it,  now it's up to you to decide whether or  not  to 
  379.      implement  it.  A  small  change was  made  in  the  receivers 
  380.      flowchart and a small incompatibility with the later revisions 
  381.      of  FSC-0039 was removed.  That will ensure that FSC-0048  and 
  382.      FSC-0039 mailers can happily talk to each other....
  383.  
  384.      The best way to implement this would be to always support FSC-
  385.      0048  on inbound trafic and generate FSC-0048 on  outbound  by 
  386.      default. A switch on a per-node basis will force your software 
  387.      to be FSC-0039 or even FSC-0001 only,  and you will cover  all 
  388.      bases.
  389.  
  390.      This can be done easily, as FSC-0048 is a superset of FSC-0039 
  391.      (The -1 thing on points being the difference) which in turn is 
  392.      a superset of FTS-0001 (CW). I'd be glad to get some feedback. 
  393.      You can put it in NET_DEV or netmail me.
  394.  
  395.                               Jan Vroonhof (2:281/1.12@fidonet)
  396.  
  397.